<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>排序元素</title>
</head>
<body>
<script type="text/javascript">
    var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
    /***********************************************************************************************************/
    //反序输出数组可以用reverse方法，然后数组内元素就会反序。
    numbers.reverse();
    console.log(numbers)
    /***********************************************************************************************************/
    // sort方法
    numbers.sort();
    console.log(numbers)//结果：[1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8,9]
    // sort方法在对数组做排序时，把元素默认成字符串进行相互比较。
    // 我们可以传入自己写的比较函数
    numbers.sort(function (a, b) {
        return a - b;
    });
    console.log(numbers)
    // 这段代码，在b大于a时，会返回负数，反之则返回正数。如果相等的话，就会返回0。
    // 也就是说返回的是负数，就说明a比b小，这样sort就根据返回值的情况给数组做排序。
    /***********************************************************************************************************/
    // 1. 自定义排序
    // 对象Person有名字和年龄属性，我们希望根据年龄排序
    var friends = [
        {name: 'John', age: 30},
        {name: 'Ana', age: 20},
        {name: 'Chris', age: 25}
    ];

    function comparePerson(a, b) {
        if (a.age < b.age) {
            return -1
        }
        if (a.age > b.age) {
            return 1
        }
        return 0;
    }

    console.log(friends.sort(comparePerson));
    /***********************************************************************************************************/
    // 2. 字符串排序
    var names = ['Ana', 'ana', 'john', 'John'];
    console.log(names.sort());//输出：["Ana", "John", "ana", "john"]
    // 既然a在字母表里排第一位，为何ana却排在了John之后呢？这是因为JavaScript在做字符比较的时候，
    // 是根据字符对应的ASCII值来比较的。例如，A、J、a、j对应的ASCII值分别是65、75、97、106。
    // 虽然在字母表里a是最靠前的，但J的ASCII值比a的小，所以排在a前面。

    // 现在，如果给sort传入一个忽略大小写的比较函数，将会输出["Ana", "ana", "John","john"]：
    names.sort(function (a, b) {
        if (a.toLowerCase() < b.toLowerCase()) {
            return -1
        }
        if (a.toLowerCase() > b.toLowerCase()) {
            return 1
        }
        return 0;
    });
    console.log(names)
    // 假如对带有重音符号的字符做排序的话，我们可以用localeCompare来实现：
    var names2 = ['Maève', 'Maeve'];
    console.log(names2.sort(function (a, b) {
        return a.localeCompare(b);
    }));
    //最后输出的结果将是["Maeve", "Maève"]。
</script>
</body>
</html>
